home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Symbol.h < prev    next >
C/C++ Source or Header  |  1992-04-27  |  1KB  |  60 lines

  1. #ifndef Symbol_First
  2. #ifdef __GNUG__
  3. //pragma once
  4. #pragma interface
  5. #endif
  6. #define Symbol_First
  7.  
  8. #include "Object.h"
  9.  
  10. class SymbolTable: public Object {
  11.     static char **table;
  12. public:
  13.     MetaDef(SymbolTable);
  14.     SymbolTable();
  15.     ~SymbolTable();
  16.     static u_int Lookup(char *name);
  17.     static u_int MakeId(char *name);
  18. };
  19.  
  20. class Symbol {
  21.     u_int id;
  22. public:
  23.  
  24.     Symbol()
  25.     { id= 0; }
  26.     Symbol(char *name)
  27.     { id= SymbolTable::MakeId(name); }
  28.     Symbol(const Symbol &at)
  29.     { id= at.id; }
  30.     
  31.     void operator=(const Symbol &at)
  32.     { id= at.id; }
  33.  
  34.     u_int Id()
  35.     { return id; }
  36.  
  37.     char *AsString()
  38.     { return (char*) id; }
  39.     
  40.     OStream& PrintOn(OStream &s)
  41.     { return s << AsString() SP; }
  42.     IStream& ReadFrom(IStream&);
  43.     
  44.     friend bool operator== (Symbol a1, Symbol a2)
  45.     { return (bool) (a1.id == a2.id); }
  46.  
  47.     friend bool operator!= (Symbol a1, Symbol a2)
  48.     { return (bool) (a1.id != a2.id); }
  49.  
  50.     friend OStream& operator<< (OStream &s, Symbol &a)
  51.     { return a.PrintOn(s); }
  52.  
  53.     friend IStream& operator>> (IStream &s, Symbol &a)
  54.     { return a.ReadFrom(s); }
  55. };
  56.  
  57. SimpleMetaDef(Symbol);
  58.  
  59. #endif
  60.